#include "mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QToolBar>
#include <QStatusBar>
#include <QLabel>
#include <QPushButton>
#include <QDebug>
#include <QDockWidget>
#include <QTextEdit>
#include <QPalette>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //this->resize(800,600);

    // 固定窗口大小
    this->setFixedSize(800,600);
    // 允许背景图填满窗口
    this->setAutoFillBackground(true);

    // 创建图片控件
    QPixmap pix = QPixmap(":/bg").scaled(this->size());
    //pix.load(":/bg");

    QPalette pal;
    pal.setBrush(QPalette::Window, QBrush(pix));
    this->setPalette(pal);


    // 创建菜单栏
    //QMenuBar* menubar = new QMenuBar(this);

    // 如果当前有菜单栏则返回，如果没有则创建一个父属性为QMainWindow的菜单栏并返回
    QMenuBar* menubar = menuBar();
    this->setMenuBar(menubar);

    // 创建菜单
    QMenu* menu1 = new QMenu("文件");
    QMenu* menu2 = new QMenu("编辑");
    QMenu* menu3 = new QMenu("构建");

    // 菜单栏增加菜单
    menubar->addMenu(menu1);
    menubar->addMenu(menu2);
    menubar->addMenu(menu3);

    // 创建菜单项
    QAction* act1 = new QAction("打开文件");
    QAction* act2 = new QAction("另存为");
    QAction* act3 = new QAction("关闭");

    menu1->addAction(act1);
    menu1->addAction(act2);
    menu1->addAction(act3);

    // 通过信号与槽点击关闭键关闭整个窗口
    connect(act3,&QAction::triggered,this,&QMainWindow::close);


    // 创建工具栏
    QToolBar* toolbar = new QToolBar(this);
    // 添加工具栏到当前窗口
    this->addToolBar(Qt::TopToolBarArea,toolbar);
    QAction* act4 = new QAction("工具");
    toolbar->addAction(act1);
    toolbar->addAction(act2);
    toolbar->addAction(act3);
    toolbar->addAction(act4);

    // 修改工具栏属性
    // 默认可以停靠在上下左右，修改工具栏不可移动
    //toolbar->setMovable(false);

    // 设置工具栏可停靠区域，上侧和左侧
    toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::TopToolBarArea);

    // 设置工具栏的浮动状态
    toolbar->setFloatable(false);


    // 创建状态栏
    QStatusBar* statusbar = this->statusBar();
    // 添加状态栏到当前窗口
    this->setStatusBar(statusbar);

    // 增加临时信息
    //statusbar->showMessage("页面显示成功",3000);

    // 增加正式信息(一般位于状态栏的左侧)
    // QLabel* label1 = new QLabel("打开文件",this);
    // statusbar->addWidget(label1);

    // 状态栏添加按钮
    QPushButton* button = new QPushButton("click");
    statusbar->addWidget(button);

    // 关联按钮触发的事件
    connect(button,&QPushButton::clicked,this,[](){qDebug()<<"test";});

    // 增加永久信息(一般位于状态栏右侧)
    QLabel* label2 = new QLabel("www.qt.com",this);
    // 将信息添加在状态栏右侧
    statusbar->addPermanentWidget(label2);


    // 创建铆接部件
    QDockWidget* dockwidget = new QDockWidget("测试",this);
    // 设置铆接部件默认显示位置并添加到窗口中
    this->addDockWidget(Qt::LeftDockWidgetArea,dockwidget);


    // 创建中心部件
    // 除了前面的部件都可以作为核心部件
    // 创建记事本作为核心部件
    QTextEdit* edit = new  QTextEdit("文件编辑器",this);
    this->setCentralWidget(edit);

}

MainWindow::~MainWindow() {}
